Кривая B-сплайна `p`ой степени определяется как
`C(u)=sum_{i=0}^nN_{i,p}(u)P_i` `a≤u≤b`(3.1)
где `{P_i}` это контрольные точки, и `{N_{i,p}(u)}` являются базисной функцией B-сплайна `p`-ой степени (уравнение [2.5]), определенная на непериодическом (и неоднородной) узловом векторе
`U="{"ubrace(a,…,a)_(p+1),u_{p+1},…,u_{m-p-1},ubrace(b,…,b)_(p+1)"}"`
(`m+1` узлах). Если не указано иное, мы предполагаем, что `a=0` и `b=1`. Многоугольник, образованный `{P_i}` называется контрольный многоугольник. Примеры B-сплайн кривых (в некоторых случаях вместе с соответствующими базисными функциями), показаны на рис 3.1-3.14.Рисунок 3.1. Кубическая кривая B-сплайна на `U={0,0,0,0,1,1,1,1}`, то есть кубическая кривая Безье.
Три шага необходимы для вычисления точки на кривой B-сплайна с фиксированным значением u:
`N_{2,2}(5/2)=1/8` `N_{3,2}(5/2)=6/8` `N_{4,2}(5/2)=1/8`
Умножая на значения контрольных точек`C(5/2)=1/8 P_2+6/8 P_3+1/8 P_4`
Соответствующий Алгоритм.CurvePoint(n,p,U,P,u,C) { /* Вычисление точек кривой */ /* Вход: n,p,U,P,u */ /* Выход: C */ span = FindSpan(n,p,u,U); BasisFuns(span,u,p,U,N); С = 0.0; for (i=0; i<=p; i++) С = С + N[i]*P[span-p+i]; }
Теперь мы перечислим ряд свойств кривых B-сплайнов. Эти свойства следуют из приведенных в главе 2 для функции `N_{i,p}(u)`. Пусть `C(u)` определяется по формуле (3.1).
Св.3.1 | Если `n=p` и `U={0,…,0,1,…,1}`, тогда `C(u)` кривая Безье (рис 3.1); |
Св.3.2 | `C(u)` является кусочно-многочленной кривой (поскольку `N_{i,p}(u)` являются кусочными многочленами);
Степень, `p`, количество контрольных точек, `n+1`, и число узлов, `m+1`, связаны
`m=n+p+1`(3.2) (смотри раздел 2.4). Рисунки 3.2 и 3.3 показывают базисные функции и участки кривых B-сплайнов, соответствующих отдельным интервальным узлам; в обоих рисунках переменные сплошные/пунктирные сегменты соответствуют различным многочленам (интервальным узлам) определённой кривой.Рисунок 3.2. (а) кубические базисные функции `U={0,0,0,0,`1⁄4,1⁄2,3⁄4`,1,1,1,1}`; (б) кубическая кривая с использованием базисных функций на рисунке 3.2a. Рисунок 3.3. (а) квадратичные базисные функции по `U={0,0,0,`1⁄5,2⁄5,3⁄5,4⁄5`,1,1,1}`; (б) квадратичная кривая с использованием базисных функций на рисунке 3.3a. |
Св.3.3 | Интерполяция конечной точки: `C(0)=P_0` и `C(1)=P_n`; |
Св.3.4 | Аффинная инвариантность: аффинное преобразование применяемое к кривой, применяется к её контрольным
точкам. Пусть `r` точка в `E^3` (трехмерное евклидово пространство). Аффинное преобразование,
обозначаемое `Φ`, проецирования `E^3` в `E^3` и имеет вид
`Φ(r)=Ar+v` где `A` это `3×3` матрица и `v` является вектором. Аффинные преобразования включают перемещения, вращения, масштабирование и подрезка. Аффинное свойство инвариантности для кривых B-сплайнов следует из свойства разбиения единицы `N_{i,p}(u)`. Итак, пусть `r=∑a_ip_i`, где `p_i∈Ε^3` и `∑a_i=1`. Тогда`Φ(r)=Φ(suma_ip_i)=A(∑a_ip_i)+v=` `∑a_iAp_i+∑a_iv=∑a_i(Ap_i+v)=∑a_iΦ(p_i)` |
Св.3.5 | Сильное свойство выпуклой оболочки: кривая содержится в выпуклой оболочке её управляющего
многоугольника; в самом деле, если `u∈[u_i,u_{i+1})`, `p≤i≤m-p-1`, то `C(u)` в выпуклой оболочке опорных
точек `P_{i-p},…,P_i` (рис 3.4, 3.5 и
3.6). Это следует из не отрицательности и свойства разбиения единицы `N_{i,p}(u)`
(Свойств Св.2.3 и
Св.2.4), и свойства, когда `N_{j,p}(u)=0`
для `j<i-p` и `j>i`, тогда `u∈[u_i,u_{i+1})`, (Свойство
Св.2.2). Рисунок 3.6 показывает, как построить квадратичную кривую,
содержащий сегмент прямой линии. С `P_2`, `P_3` и `P_4` лежат на одной прямой, свойство сильной выпуклой
оболочки заставляет кривую быть прямолинейной на отрезке от `C(2⁄5)` до `C(3⁄5)`.
Рисунок 3.4. Свойство сильной выпуклой оболочки для квадратичной кривой B-сплайна; для `u in [u_i,u_{i+1})`, `C(u)` находится в треугольнике `P_{i-2}P_{i-1}P_i`. Рисунок 3.5. Свойство сильной выпуклой оболочки для кубической кривой B-сплайна; для `u in [u_i,u_{i+1})`,`C(u)` находится в четырехугольнике `P_{i-3}P_{i-2}P_{i-1}P_i`. Рисунок 3.6. Квадратичная кривая B-сплайна для `U={0,0,0,`1⁄5,2⁄5,3⁄5,4⁄5,`1,1,1}`. Кривая представляет собой прямую линию между C(2⁄5) и C(3⁄5). |
Св.3.6 | Местная схема модификации: перемещение `P_i` меняет `C(u)` только в интервале `[u_i,u_{i+p+1})` (
рис 3.7). Это следует из того, что `N_{i,p}(u)=0` для `u∉[u_i,u_{i+p+1})`
(Свойство Св.2.1).
Рисунок 3.7. Кубическая кривая по `U={0,0,0,0,`1⁄4,1⁄2,3⁄4,`1,1,1,1}`; перемещение `P_4` (к `P_4^'`) изменяет кривую в интервале [1⁄4,1). |
Св.3.7 | Контрольный многоугольник представляет собой кусочно-линейную аппроксимацию к кривой; это приближение
улучшается путем введения узлов или степени высоты (см главу
5). Как правило, чем ниже степень, тем ближе кривая B-сплайна следует к её контрольному
многоугольнику (рисунки 3.8 и 3.9). Кривые на
рисунке 3.9 определены с использованием одних и тех же шести контрольных точек, и
векторами узлов
Рисунок 3.8. Кривые B-сплайнов, (a) Кривая Безье девятой степени на векторе узлов `U={0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}`; (б) квадратичная кривая, использующая тот же контрольный многоугольник, определенный на `U={0,0,0,`1⁄8,2⁄8,3⁄8,4⁄8,5⁄8,6⁄8,7⁄8`,1,1,1}`. Рисунок 3.9. Кривые B-сплайнов разной степени с использованием одного и того же контрольного многоугольника. `p=1∶U={0,0,`1⁄5,2⁄5,3⁄5,4⁄5`,1,1}` `p=2∶U={0,0,0,`1⁄4,1⁄2,3⁄4`,1,1,1}` `p=3∶U={0,0,0,0,`1⁄3,2⁄3`,1,1,1,1}` `p=4∶U={0,0,0,0,0,`1⁄2`,1,1,1,1,1}` `p=5∶U={0,0,0,0,0,0,1,1,1,1,1,1}` Причина этого явления является интуитивно понятной: чем ниже степень, тем меньше контрольных точек, которые вносят вклад вычисления `C(u_0)` для любого заданного `u_0`. Крайний случай `p=1`, для которого каждая точка `C(u)` просто линейная интерполяция между двумя контрольными точками. В этом случае кривая является контрольным многоугольником; |
Св.3.8 | Двигаясь по кривой от `u=0` к `u=1`, функции `N_{i,p}(u)` действуют как переключатели; как `u` проходит узел, один `N_{i,p}(u)` (и, следовательно, соответствующие `P_i`) выключается, и следующий включается (рис 3.2 и 3.3). |
Св.3.9 | Свойство уменьшения измерения: нет плоскости имеющей больше пересечений с кривой, чем с контрольным многоугольником (замените слово “плоскость” на “линию”, для двумерных кривых) - см [ Lane83] для доказательства; |
Св.3.10 | Непрерывность и дифференцируемость `C(u)` следует из `N_{i,p}(u)` (просто `C(u)` является линейной
комбинацией `N_{i,p}(u)`). Таким образом, `C(u)` бесконечно дифференцируема в границах узловых
интервалов, и это, по крайней мере `p-k` раз непрерывно дифференцируема в узел кратности `k`.
Рисунок 3.10 показывает квадратичную кривую (`p=2`). Кривая `C^1` непрерывна
(первая производная непрерывна, но второй нет) во всех внутренних узлах кратности 1. На двойной
узел, `u=4⁄5`, `C(u)` только `C^0` непрерывна, при этом она параболическая (визуальный разрыв). Рисунок 3.11 показывает квадратичную кривую, определенную на тех же
векторах узлов. Таким образом, эти две кривые использовали одни и те же базисные функции,
`N_{i,p}(u)`, для их определения. Но кривая на рис 3.11 `C^1` непрерывна в
`u=4⁄5`; это не очевидно, но можно увидеть, используя производную выражения, заданного в разделе 3.3. Это просто следствие того факта, что разрывные функции
иногда могут быть объединены таким образом, что результат является непрерывным. Обратите внимание, что
`P_4`, `P_5` и `P_6` лежат на одной прямой, `length(P_4 P_5)=length(P_5 P_6)`. Рисунок 3.12 показывает кубическую кривую, `C^2` непрерывна в `u=`1⁄4, и
`u=`1⁄2, но только `C^1` непрерывна в двойном узле `u=3⁄4`. Глаз обнаруживает разрывы во второй
производной, но, вероятно, не в третьих и высших производных. Таким образом, кубики, как правило,
достаточно для визуальных целей.
Рисунок 3.10. Квадратичная кривая для `U={0,0,0,`1⁄5,2⁄5,3⁄5,4⁄5`,1,1,1}` с острием при `u=4⁄5`. Рисунок 3.11. Квадратичная кривая по `U={0,0,0,`1⁄5,2⁄5,3⁄5,4⁄5`,1,1,1}`; первая производная непрерывна при `u=4⁄5`. Рисунок 3.12. Кубическая кривая на `U={0,0,0,0,`1⁄4,1⁄2,3⁄4`,1,1,1,1}`, `C^2` непрерывный при `u=1⁄4` и `u=1⁄2`, и `C^1` непрерывный при `u=3⁄4`. |
Св.3.11 | Возможно (и иногда полезно) использовать несколько (совпадающих) контрольных точек. Рисунок 3.13 показывает квадратичную кривую с двойной точкой управления,
`P_2``=P_3`. Интересная часть этой кривой лежит между C(1⁄2) и C(3⁄4). Действительно,
C(1⁄2)`=P_2=P_3`, и сегменты кривой между C(1⁄4) и C(1⁄2), и C(1⁄2) и C(3⁄4), представляют собой
прямые линии. Это следует из свойства Св.3.5, например, `C(u)` в выпуклой
оболочке `P_1P_2P_3` (линии), если `u∈`[1⁄4,1⁄2). Кроме того, поскольку узел `u=`1⁄2 имеет
кратность `=1`, кривая должна быть `C^1` непрерывной там, даже если он имеет точку возврата
(визуальный разрыв). Это результат от величины первой производной вектора стремится к нулю (непрерывно)
на `u=`1⁄2. В следующем разделе мы увидим, что производная в `u=`1⁄2 пропорциональна разнице,
`P_3-P_2`. Рисунки 3.14а и 3.14б демонстрируют
кубические примеры, используя тот же контрольный многоугольник, в том числе точки двойного управления,
`P_2=P_3`, но с различными векторами узлов.
Рисунок 3.13. Квадратичная кривая на `U={0,0,0,0,`1⁄4,1⁄2,3⁄4,`1,1,1,1}`; `P_2=P_3` двойная контрольная точка. Рисунок 3.14. Кубические кривые с двойной контрольной точкой `P_2=P_3` (a) `U={0,0,0,0,`1⁄4,3⁄4,`1,1,1,1}` (b) `U={0,0,0,0,`1⁄2,1⁄2,`1,1,1,1}`. |